package views.createViews;

import javax.swing.DefaultListModel;
import javax.swing.JFrame;
import javax.swing.GroupLayout;
import javax.swing.GroupLayout.Alignment;
import javax.swing.JList;
import javax.swing.JButton;
import javax.swing.LayoutStyle.ComponentPlacement;
import javax.swing.JComboBox;
import javax.swing.JLabel;

import core.logic.dataAccess.PersoneelDAO;
import core.logic.dataAccess.Personeel_VluchtDAO;
import core.logic.dataAccess.VliegtuigenDAO;
import core.logic.dataAccess.VluchtenDAO;
import core.logic.services.BemanningAanduidenService;
import core.models.dataModels.BemanningAanduidenModel;
import core.models.domainModel.Eigenaar;
import core.models.domainModel.Personeel;

import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

import javax.swing.JScrollBar;
import javax.swing.JScrollPane;

import controllers.BemanningAanduidenController;

public class ToevoegenBemanningenView extends JFrame{
	private BemanningAanduidenModel _model;
	int AantalPilotenToegevoegd = 0;
	int AantalStewardsToegevoegd = 0;
	
	
	
	public ToevoegenBemanningenView(BemanningAanduidenModel model) {
		
		_model = model;

		
		
		final JLabel lblInfo = new JLabel();
		lblInfo.setText("Aantal piloten toegevoegd: "
				+ AantalPilotenToegevoegd + "     Aantal stewards toegevoegd: "
				+ AantalStewardsToegevoegd);
		
		final JLabel lblMinimum = new JLabel();
		lblMinimum.setText("Aantal nodige piloten: "
				+ Integer.toString(_model.getAantalPiloten())
				+ "Aantal nodige stewards: "
				+ Integer.toString(_model.getAantalStuwards()));
		
		final JComboBox cmbPiloten = new JComboBox();
		
		final JComboBox cmbStewardsStewardessen = new JComboBox();
		
		if (_model.get_mogelijkePiloten() != null) {
			for (Personeel _Personeel : _model.get_mogelijkePiloten()) {

				// comboboxen met nog niet geselecteerde piloten die van een
				// bepaalde eigenaar zijn opvullen MAAR niet met reeds
				// geselecteerde piloten
				cmbPiloten.addItem(_Personeel);

			}
		}
		if (_model.get_mogelijkeStewardsStewardessen() != null) {
			for (Personeel _Personeel : _model
					.get_mogelijkeStewardsStewardessen()) {

				// comboboxen met nog niet geselecteerde piloten die van een
				// bepaalde eigenaar zijn opvullen MAAR niet met reeds
				// geselecteerde piloten
				cmbStewardsStewardessen.addItem(_Personeel);

			}
		}
		
		// tellen voor lblminimum waardes te weten
				if (_model.get_geselecteerd() != null) {
					// tellen aantal piloten en stewards die reeds zijn toegevoegd
					for (Personeel _Personeel : _model.get_geselecteerd()) {
						if (_Personeel.get_personeelType().equals("P")) {
							AantalPilotenToegevoegd++;
							lblInfo.setText("Aantal piloten toegevoegd: "
									+ AantalPilotenToegevoegd + "     Aantal stewards toegevoegd: "
									+ AantalStewardsToegevoegd);

							// reeds geselecteerde piloten uit combobox halen want die
							// mogen niet 2 maal geselecteerd worden
							cmbPiloten.removeItem(_Personeel);

						} else if (_Personeel.get_personeelType().equals("S")) {

							AantalStewardsToegevoegd++;
							lblInfo.setText("Aantal piloten toegevoegd: "
									+ AantalPilotenToegevoegd + "     Aantal stewards toegevoegd: "
									+ AantalStewardsToegevoegd);

							// reeds geselecteerde stewards uit combobox halen want die
							// mogen niet 2 maal geselecteerd worden
							cmbStewardsStewardessen.removeItem(_Personeel);
						}
					}
				}
		
				// eerst listbox opvullen met piloten die reeds zijn toegewezen
				final DefaultListModel<Personeel> listModel = new DefaultListModel<Personeel>();
				for (Personeel _Personeel : _model.get_geselecteerd()) {
					listModel.addElement(_Personeel);
				}

				JList list = new JList(listModel);
				JScrollPane scrollPane = new JScrollPane(list);
				
				
		JButton btnPilootToevoegen = new JButton("Piloot Toevoegen");
		btnPilootToevoegen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent arg0) {
				if(!(_model.get_geselecteerd().contains(cmbPiloten.getSelectedItem())) && !(listModel.contains(cmbPiloten.getSelectedItem())))
						{
							_model.get_geselecteerd().add((Personeel) cmbPiloten.getSelectedItem());
							listModel.addElement((Personeel) cmbPiloten.getSelectedItem());
							AantalPilotenToegevoegd ++;
								lblInfo.setText("Aantal piloten toegevoegd: "
											+ AantalPilotenToegevoegd + "     Aantal stewards toegevoegd: "
											+ AantalStewardsToegevoegd);
						}
				
			}
		});
		
		JButton btnStewardToevoegen = new JButton("Steward Toevoegen");
		btnStewardToevoegen.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				if(!(_model.get_geselecteerd().contains(cmbStewardsStewardessen.getSelectedItem())) && !(listModel.contains(cmbStewardsStewardessen.getSelectedItem())))
				{
					_model.get_geselecteerd().add((Personeel) cmbStewardsStewardessen.getSelectedItem());
					listModel.addElement((Personeel) cmbStewardsStewardessen.getSelectedItem());
					AantalStewardsToegevoegd ++;
					lblInfo.setText("Aantal piloten toegevoegd: "
						+ AantalPilotenToegevoegd + "     Aantal stewards toegevoegd: "
						+ AantalStewardsToegevoegd);
				}
			}
		});
		
		
		
		JButton btnToevoegenBemanning = new JButton("Toevoegen");
		btnToevoegenBemanning.addActionListener(new ActionListener() {
			public void actionPerformed(ActionEvent e) {
				BemanningAanduidenController.handleView(_model);
			}
		});
		GroupLayout groupLayout = new GroupLayout(getContentPane());
		groupLayout.setHorizontalGroup(
			groupLayout.createParallelGroup(Alignment.LEADING)
				.addGroup(groupLayout.createSequentialGroup()
					.addGap(32)
					.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
						.addGroup(groupLayout.createSequentialGroup()
							.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
								.addComponent(cmbPiloten, 0, 386, Short.MAX_VALUE)
								.addComponent(cmbStewardsStewardessen, 0, 382, Short.MAX_VALUE))
							.addPreferredGap(ComponentPlacement.UNRELATED)
							.addGroup(groupLayout.createParallelGroup(Alignment.LEADING)
								.addComponent(btnPilootToevoegen)
								.addComponent(btnStewardToevoegen)))
						.addComponent(lblMinimum)
						.addComponent(lblInfo)
						.addGroup(groupLayout.createSequentialGroup()
							.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 467, GroupLayout.PREFERRED_SIZE)
							.addPreferredGap(ComponentPlacement.RELATED)))
					.addGap(39))
				.addGroup(groupLayout.createSequentialGroup()
					.addGap(24)
					.addComponent(btnToevoegenBemanning)
					.addContainerGap(481, Short.MAX_VALUE))
		);
		groupLayout.setVerticalGroup(
			groupLayout.createParallelGroup(Alignment.LEADING)
				.addGroup(groupLayout.createSequentialGroup()
					.addGap(18)
					.addComponent(lblInfo)
					.addPreferredGap(ComponentPlacement.UNRELATED)
					.addComponent(lblMinimum)
					.addGap(18)
					.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
						.addComponent(btnPilootToevoegen)
						.addComponent(cmbPiloten, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
					.addPreferredGap(ComponentPlacement.UNRELATED)
					.addGroup(groupLayout.createParallelGroup(Alignment.BASELINE)
						.addComponent(btnStewardToevoegen)
						.addComponent(cmbStewardsStewardessen, GroupLayout.PREFERRED_SIZE, GroupLayout.DEFAULT_SIZE, GroupLayout.PREFERRED_SIZE))
					.addPreferredGap(ComponentPlacement.RELATED)
					.addComponent(scrollPane, GroupLayout.PREFERRED_SIZE, 224, GroupLayout.PREFERRED_SIZE)
					.addGap(18)
					.addComponent(btnToevoegenBemanning)
					.addContainerGap(61, Short.MAX_VALUE))
		);
		getContentPane().setLayout(groupLayout);
	}
	
	
}
